<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="Iz3wQ" id="Iz3wQ"><span data-lake-id="u580e2d4e" id="u580e2d4e">典型回答</span></h1>
  <p data-lake-id="u669afce0" id="u669afce0"><br></p>
  <p data-lake-id="u713515bc" id="u713515bc"><span data-lake-id="u2533c4ff" id="u2533c4ff"> </span></p>
  <p data-lake-id="u82ef7931" id="u82ef7931"><span data-lake-id="u43f5aea9" id="u43f5aea9">通常情况下，finally的代码一定会被执行，但是这是有一个前提的，：</span></p>
  <p data-lake-id="ubef02dd9" id="ubef02dd9"><span data-lake-id="u1b158bf8" id="u1b158bf8">1、对应 try 语句块被执行， </span></p>
  <p data-lake-id="ubb45c3bf" id="ubb45c3bf"><span data-lake-id="u20f7fa9a" id="u20f7fa9a">2、程序正常运行。</span></p>
  <p data-lake-id="u5f2691fb" id="u5f2691fb"><span data-lake-id="u39829dff" id="u39829dff">​</span><br></p>
  <p data-lake-id="u13a2746a" id="u13a2746a"><span data-lake-id="ucab0468c" id="ucab0468c">如果没有符合这两个条件的话，finally中的代码就无法被执行，如发生以下情况，都会导致finally不会执行：</span></p>
  <p data-lake-id="u53667f87" id="u53667f87"><span data-lake-id="u2095a837" id="u2095a837">​</span><br></p>
  <p data-lake-id="u739ed62d" id="u739ed62d"><span data-lake-id="u3089ce5a" id="u3089ce5a">1、System.exit()方法被执行</span></p>
  <p data-lake-id="u0eb330e9" id="u0eb330e9"><span data-lake-id="uc150b4bf" id="uc150b4bf">2、Runtime.getRuntime().halt()方法被执行</span></p>
  <p data-lake-id="uc45aec95" id="uc45aec95"><span data-lake-id="u1e0d0783" id="u1e0d0783">3、try或者catch中有死循环</span></p>
  <p data-lake-id="uffaf872c" id="uffaf872c"><span data-lake-id="uad9d11e0" id="uad9d11e0">4、操作系统强制杀掉了JVM进程，如执行了kill -9</span></p>
  <p data-lake-id="u48ed614f" id="u48ed614f"><span data-lake-id="u1bae68b0" id="u1bae68b0">5、其他原因导致的虚拟机崩溃了</span></p>
  <p data-lake-id="uc8ced35d" id="uc8ced35d"><span data-lake-id="uc0de76ba" id="uc0de76ba">6、虚拟机所运行的环境挂了，如计算机电源断了</span></p>
  <p data-lake-id="u863a8f18" id="u863a8f18"><span data-lake-id="u93f1743e" id="u93f1743e">7、如果一个finally是由守护线程执行的，那么是不保证一定能执行的，如果这时候JVM要退出，JVM会检查其他非守护线程，如果都执行完了，那么就直接退出了。这时候finally可能就没办法执行完。</span></p>
  <p data-lake-id="u79c83b2e" id="u79c83b2e"><span data-lake-id="u4b27390b" id="u4b27390b">​</span><br></p>
  <h1 data-lake-id="oXss0" id="oXss0"><span data-lake-id="u6f715a63" id="u6f715a63">扩展知识</span></h1>
  <p data-lake-id="ub63fe854" id="ub63fe854"><br></p>
  <h2 data-lake-id="ElywH" id="ElywH"><span data-lake-id="u4b672c87" id="u4b672c87">finally执行顺序</span></h2>
 </body>
</html>